创意小发明:山寨码表.自行车码表的制作 程序原理图,设计图,源代码 您所在的位置:网站首页 honey select16 创意小发明:山寨码表.自行车码表的制作 程序原理图,设计图,源代码

创意小发明:山寨码表.自行车码表的制作 程序原理图,设计图,源代码

2023-03-13 18:59| 来源: 网络整理| 查看: 265

最近比较懒,因缺乏锻炼,加上之前上了2个月的"长夜班",身体有米其林化的趋势.为了阻止这种不良的发展.决定买个二手自行车在家骑自行车锻炼锻炼.

但是很快发现光骑车没劲,于是出于好奇心里 做个码表装上看看能骑多少快,骑了多少路.

废话不多说,先上实物图: 在这里插入图片描述 虽然样子有点丑,但是显示效果还是可以滴

单片机用stc89c52,因为之前买了几片还没用掉,因为它只要3块多钱,因为我只要几个IO加上外部中断,定时器. 显示用yleee的12232液晶,因为已经放了快2年了.3片只用掉一片,而且做完之后依然压箱底. 不用掉浪费. 电源用白菜模块做单锂升压到5.2v来使用. 因为买了太多了,不用掉浪费. 在这里插入图片描述 电池暂时找了块yleee的太阳能移动电源中的大肚子锂聚合物电池. 当时肚子很大,电压很低.给它捅了一刀以后继续充电,身材恢复苗条,就是有点皱纹. 500ma放电能有3,400 mah容量. 传感器用了大家都说好的干簧管,还是从中学劳技课的板子上拆下来的. 磁钢安装就尽显山寨本色了. 在这里插入图片描述 在这里插入图片描述 既然画了PCB,就顺便加上了 1302, 18b20,万一没事干又想加上去了. 在这里插入图片描述 板子继续热转印,这次买了瓶新的三氯化铁,放在新买的电磁炉里水浴加热到80°,竟然还花了10几分钟. 期间还把三氯化铁滴到了锅子里,以后吃火锅能吃到正宗的化学锅底了. 恩. 在这里插入图片描述 这是之前的试做版本.

话说制作期间,一天都没运动过,终于在第六天倒下了,去医院把我全新的医保卡上写上了历史性的一页,而配的药的纸壳,就成了这次的山寨码表暂时蜗居的地方.

刚才完成基本功能,发现我的破车骑在20km/h已经很吃力了. 全力只能跑到30km/h. 看来也就这水平了. 在这里插入图片描述 为了看得清, 用了四倍字体大小. 很给力. 在这里插入图片描述 界面就改成这样了. 显示这些东西也够看了 按第一个键保存总行程. 第三个键背光开关. 开机时摁住第一第二键 总行程清零.

自行车山寨码表 参考源代码

#include “12232.h”

#define A0_0() LCD_A0 = 0 #define A0_1() LCD_A0 = 1 #define E1_0() LCD_E1 = 0 #define E1_1() LCD_E1 = 1 #define E2_0() LCD_E2 = 0 #define E2_1() LCD_E2 = 1

#define LCD_DISPLAYON 0xaf //af 开显示 #define LCD_DISPLAYOFF 0xae //ae 关显示 #define LCD_DRIVERON 0xa5 //a5 静态显示驱动 #define LCD_DRIVEROFF 0xa4 //a4 正常驱动 #define LCD_DUTY16 0xa8 //占空比1/16 #define LCD_DUTY32 0xa9 //占空比1/32

#define LCD_END 0xee /关闭“读-修改-写”模式,并把列地址指针 恢复到打开“读-修改-写”模式前的位置。/

#define LCD_RESET 0xe2 /初始化。① 设置显示初始行为第一行; ②页地址设置为第三页。/

#define LCD_RWMODE 0xe0 /*“读-修改-写”模式 。执行该指令以后, 每执行一次写数据,指令列地址自动加1; 但执行读数据指令时列地址不会改变。 这个状态一直持续到执行“END”指令。 注意:在“读-修改-写”模式下, 除列地址设置指令之外,其他指令照常执行。 */

#define LCD_STARTLINE0 0xc0 //设置显示起始行 可以加0-31 #define LCD_PAGE0 0xb8 //页地址设置 可以加0-3 #define LCD_COLUMNADDR0 0x00 //列地址设置 可以加0-60

#define LCD_ON() LCD_Command(LCD_DISPLAYON) #define LCD_OFF() LCD_Command(LCD_DISPLAYOFF) #define LCD_StaticON() LCD_Command(LCD_DRIVERON) #define LCD_StaticOFF() LCD_Command(LCD_DRIVEROFF) #define LCD_Select16() LCD_Command(LCD_DUTY16) #define LCD_Select32() LCD_Command(LCD_DUTY32) #define LCD_StartRW() LCD_Command(LCD_RWMODE) #define LCD_EndRW() LCD_Command(LCD_END) #define LCD_Reset() LCD_Command(LCD_RESET) #define LCD_SetStartLine(i) LCD_Command(LCD_STARTLINE0|i) #define LCD_SetPage(i) LCD_Command(LCD_PAGE0|i) #define LCD_SetColumn(i) LCD_Command(LCD_COLUMNADDR0|i)

unsigned char code ascii[][6]={ {0x00,0x00,0x00,0x00,0x00,0x00},/0 SPACE/ {0x00,0x00,0x00,0x4f,0x00,0x00},/1 !/ {0x00,0x00,0x00,0x07,0x00,0x07},/2 "/ {0x00,0x14,0x7f,0x14,0x7f,0x14},/3 #/ {0x00,0x24,0x2a,0x7f,0x2a,0x12},/4 $/ {0x00,0x23,0x13,0x08,0x62,0x61},/5 %/ {0x00,0x36,0x49,0x55,0x22,0x50},/6 &/ {0x00,0x00,0x00,0x05,0x03,0x00},/7 '/ {0x00,0x00,0x1c,0x22,0x41,0x00},/8 (/ {0x00,0x00,0x41,0x22,0x1c,0x00},/9 )/ {0x00,0x14,0x08,0x3e,0x08,0x14},/*10 **/ {0x00,0x08,0x08,0x3e,0x08,0x08},/11 +/ {0x00,0x00,0x00,0x28,0x18,0x00},/12 ,/ {0x00,0x08,0x08,0x08,0x08,0x08},/13 -/ {0x00,0x00,0x00,0x60,0x60,0x00},/14 ./ {0x00,0x20,0x10,0x08,0x04,0x02},/15 // {0x00,0x3e,0x51,0x49,0x45,0x3e},/16 0/ {0x00,0x00,0x42,0x7f,0x40,0x40},/17 1/ {0x00,0x62,0x51,0x51,0x49,0x46},/18 2/ {0x00,0x21,0x41,0x45,0x4b,0x31},/19 3/ {0x00,0x18,0x14,0x12,0x7f,0x10},/20 4/ {0x00,0x27,0x45,0x45,0x45,0x39},/21 5/ {0x00,0x3c,0x4a,0x49,0x49,0x30},/22 6/ {0x00,0x01,0x71,0x09,0x05,0x03},/23 7/ {0x00,0x36,0x49,0x49,0x49,0x36},/24 8/ {0x00,0x06,0x49,0x49,0x29,0x1e},/25 9/ {0x00,0x00,0x36,0x36,0x00,0x00},/26 :/ {0x00,0x00,0x56,0x36,0x00,0x00},/27 ;/ {0x00,0x08,0x14,0x22,0x41,0x00},/28 / {0x00,0x02,0x01,0x51,0x09,0x06},/31 ?/ {0x00,0x3e,0x59,0x55,0x79,0x3e},/32 @/ {0x00,0x7e,0x21,0x21,0x21,0x7e},/33 A/ {0x00,0x7f,0x49,0x49,0x49,0x36},/34 B/ {0x00,0x3e,0x41,0x41,0x41,0x22},/35 C/ {0x00,0x7f,0x41,0x41,0x22,0x1c},/36 D/ {0x00,0x7f,0x49,0x49,0x49,0x49},/37 E/ {0x00,0x7f,0x09,0x09,0x09,0x01},/38 F/ {0x00,0x3e,0x41,0x49,0x49,0x7a},/39 G/ {0x00,0x7f,0x08,0x08,0x08,0x7f},/40 H/ {0x00,0x41,0x7f,0x41,0x00,0x00},/41 I/ {0x00,0x20,0x40,0x41,0x3f,0x01},/42 J/ {0x00,0x7f,0x08,0x14,0x22,0x41},/43 K/ {0x00,0x7f,0x40,0x40,0x40,0x40},/44 L/ {0x00,0x7f,0x02,0x0c,0x02,0x7f},/45 M/ {0x00,0x7f,0x04,0x08,0x10,0x7f},/46 N/ {0x00,0x3e,0x41,0x41,0x41,0x3e},/47 O/ {0x00,0x7f,0x09,0x09,0x09,0x06},/48 P/ {0x00,0x3E,0x41,0x51,0x21,0x5E},/49 Q/ {0x00,0x7f,0x09,0x19,0x29,0x46},/50 R/ {0x00,0x46,0x49,0x49,0x49,0x31},/51 S/ {0x00,0x01,0x01,0x7f,0x01,0x01},/52 T/ {0x00,0x3f,0x40,0x40,0x40,0x3f},/53 U/ {0x00,0x1f,0x20,0x40,0x20,0x1f},/54 V/ {0x00,0x3f,0x40,0x38,0x40,0x3f},/55 W/ {0x00,0x63,0x14,0x08,0x14,0x63},/56 X/ {0x00,0x07,0x08,0x70,0x08,0x07},/57 Y/ {0x00,0x61,0x51,0x49,0x45,0x43},/58 Z/ {0x00,0x00,0x7f,0x41,0x41,0x00},/59 [/ {0x00,0x01,0x02,0x08,0x10,0x20},/*50 */ {0x00,0x00,0x41,0x41,0x7f,0x00},/61 ]/ {0x00,0x04,0x02,0x01,0x02,0x04},/62 ^/ {0x00,0x40,0x40,0x40,0x40,0x40},/63 _/ {0x00,0x00,0x01,0x02,0x04,0x00},/64 `/ {0x00,0x20,0x54,0x54,0x54,0x7c},/65 a/ {0x00,0x7f,0x48,0x44,0x44,0x38},/66 b/ {0x00,0x38,0x44,0x44,0x44,0x20},/67 c/ {0x00,0x38,0x44,0x44,0x48,0x7f},/68 d/ {0x00,0x38,0x54,0x54,0x54,0x18},/69 e/ {0x00,0x08,0x7e,0x09,0x01,0x02},/70 f/ {0x00,0x0c,0x52,0x52,0x52,0x3e},/71 g/ {0x00,0x7f,0x08,0x04,0x04,0x78},/72 h/ {0x00,0x00,0x44,0x7d,0x40,0x00},/73 i/ {0x00,0x40,0x40,0x44,0x3d,0x00},/74 j/ {0x00,0x7f,0x10,0x28,0x44,0x00},/75 k/ {0x00,0x00,0x41,0x7e,0x40,0x00},/76 l/ {0x00,0x7c,0x04,0x18,0x04,0x78},/77 m/ {0x00,0x7c,0x08,0x04,0x04,0x78},/78 n/ {0x00,0x38,0x44,0x44,0x44,0x38},/79 o/ {0x00,0x7c,0x14,0x14,0x14,0x08},/80 p/ {0x00,0x08,0x14,0x14,0x14,0x7c},/81 q/ {0x00,0x7c,0x08,0x04,0x04,0x08},/82 r/ {0x00,0x48,0x54,0x54,0x54,0x20},/83 s/ {0x00,0x04,0x3f,0x44,0x44,0x24},/84 t/ {0x00,0x3c,0x40,0x40,0x20,0x7c},/85 u/ {0x00,0x1c,0x20,0x40,0x20,0x1c},/86 v/ {0x00,0x3c,0x40,0x30,0x40,0x3c},/87 w/ {0x00,0x44,0x28,0x10,0x28,0x44},/88 x/ {0x00,0x06,0x48,0x48,0x48,0x3e},/89 y/ {0x00,0x44,0x64,0x54,0x4c,0x44},/80 z/ {0x00,0x00,0x08,0x36,0x41,0x00},/91 {/ {0x00,0x00,0x00,0x7e,0x00,0x00},/92 |/ {0x00,0x00,0x41,0x36,0x08,0x00},/93 }/ {0x00,0x04,0x08,0x04,0x08,0x04},/94 ~/ {0x10,0x20,0x40,0x20,0x10,0x08},//95对号一半 {0x04,0x02,0x00,0x00,0x00,0x00},//96对号一半

};

unsigned char target1,target2,target3,target4;

/******************************************************************************************

函数名称 :LCD_Command功能描述 :写命令参数 : 参数名称: 输入/输出? 类型 描述返回值 :作者 :创建日期 :2018-12-19全局变量 :全局静态变量:局部静态变量: *----------------------------------------修改历史------------------------------------------当前版本 : 修改人: 修改日期:修改说明 : / void LCD_Command(unsigned char nCommand) { A0_0(); // asm(“nop”); // asm(“nop”); E1_1(); E2_1(); // asm(“nop”); // asm(“nop”); DATA=nCommand; // asm(“nop”); // asm(“nop”); E1_0(); E2_0(); } /函数名称 :LCD_SetRam功能描述 :送显示数据ndata,setMS为0主,1从参数 : 参数名称: 输入/输出? 类型 描述返回值 :作者 :创建日期 :2018-12-19全局变量 :全局静态变量:局部静态变量: *----------------------------------------修改历史------------------------------------------当前版本 : 修改人: 修改日期:修改说明 : / void LCD_SetRam(unsigned char ChipSelect,unsigned char ndata) { A0_1(); // asm(“nop”); // asm(“nop”); if( ChipSelect ) { E1_0(); E2_1(); //选择左半屏 } else { E1_1(); //选择右半屏 E2_0(); } // asm(“nop”); // asm(“nop”); DATA=ndata; // asm(“nop”); // asm(“nop”); E1_0(); E2_0(); } /函数名称 :LCD_Init功能描述 :参数 : 参数名称: 输入/输出? 类型 描述返回值 :作者 :创建日期 :2018-12-19全局变量 :全局静态变量:局部静态变量: *----------------------------------------修改历史------------------------------------------当前版本 : 修改人: 修改日期:修改说明 : ******************************************************************************************/ void LCD_init(void) { LCD_OFF(); //关闭显示 LCD_Command(LCD_RESET); //复位 LCD_Command(0xa0); //列与段驱动反方向 LCD_Command(LCD_DUTY32); //1/32 LCD_Command(0xa4); //关闭静态显示 打开正常驱动 LCD_EndRW(); //关闭自动列加1 LCD_SetStartLine(0); //设置起始行 LCD_SetColumn(0); //起始列 LCD_SetPage(0); //起始页 LCD_ON(); //开显示 }

/******************************************************************************************

函数名称 :clrscr

功能描述 :清屏

参数 : 参数名称: 输入/输出? 类型 描述

返回值 :

作者 :

创建日期 :2018-12-19

全局变量 :

全局静态变量:

局部静态变量: *----------------------------------------修改历史------------------------------------------

当前版本 : 修改人: 修改日期:

修改说明 : / void clrscr(unsigned char hdata) { unsigned char i; unsigned char page; for(page=0;page LCD_SetColumn(i); LCD_SetRam(0,hdata); LCD_SetRam(1,hdata); } } } /

函数名称 :drawword

功能描述 ://layer 值为0,2;wenzi 码表中的几个字

参数 : 参数名称: 输入/输出? 类型 描述

返回值 :

作者 :

创建日期 :2018-12-19

全局变量 :

全局静态变量:

局部静态变量: *----------------------------------------修改历史------------------------------------------

当前版本 : 修改人: 修改日期:

修改说明 : *****************************************************************************************/ / void drawword(unsigned char liedizhi,unsigned char layer,unsigned char *buff) { unsigned char column,i;//layer 值为0,2;wenzi 码表中的几个字 unsigned char cs; for(i=0;i cs=1; column-=61; } else cs=0;

//LCD_SetStartLine(0);//设置起始行 LCD_SetColumn(column);//设置起始列 LCD_SetPage(layer); LCD_SetRam(cs,(buff+i)); //LCD_SetStartLine(0);//设置起始行 LCD_SetColumn(column);//设置起始列 LCD_SetPage(layer+1); LCD_SetRam(cs,(buff+16+i)); } } */

void drawascii(unsigned char liedizhi,unsigned char layer,unsigned char *text) { unsigned char column,i;//layer 值为0,2;wenzi 码表中的几个字 unsigned char cs;

while(*text) { for(i=0;i cs=1; column-=61; } else cs=0;

//LCD_SetStartLine(0);//设置起始行 LCD_SetColumn(column);//设置起始列 LCD_SetPage(layer); LCD_SetRam(cs,ascii[*text-32][i]); } text++; liedizhi+=6; } }

void make_ascii_big(unsigned char c) { target1 = 0; target2 = 0;

if((c&0x80) != 0) { target1 += 192; } if((c&0x40) != 0) { target1 += 48; } if((c&0x20) != 0) { target1 += 12; } if((c&0x10) != 0) { target1 += 3; }

if((c&0x08) != 0) { target2 += 192; } if((c&0x04) != 0) { target2 += 48; } if((c&0x02) != 0) { target2 += 12; } if((c&0x01) != 0) { target2 += 3; } }

void make_ascii_very_big(unsigned char c) { target1 = 0; target2 = 0; target3 = 0; target4 = 0;

if((c&0x80) != 0) { target1 += 240; } if((c&0x40) != 0) { target1 += 15; } if((c&0x20) != 0) { target2 += 240; } if((c&0x10) != 0) { target2 += 15; }

if((c&0x08) != 0) { target3 += 240; } if((c&0x04) != 0) { target3 += 15; } if((c&0x02) != 0) { target4 += 240; } if((c&0x01) != 0) { target4 += 15; } }

void draw_big_ascii(unsigned char liedizhi,unsigned char layer,unsigned char *text) { unsigned char column,i; unsigned char cs;

while(*text) { for(i=0;i cs=1; column-=61; } else cs=0;

make_ascii_big(ascii[*text-32][i]);

LCD_SetColumn(column);//设置起始列 LCD_SetPage(layer); LCD_SetRam(cs,target2);

LCD_SetColumn(column);//设置起始列LCD_SetPage(layer+1); LCD_SetRam(cs,target1);

LCD_SetColumn(column+1);//设置起始列 LCD_SetPage(layer); LCD_SetRam(cs,target2);

LCD_SetColumn(column+1);//设置起始列 LCD_SetPage(layer+1); LCD_SetRam(cs,target1); } text++; liedizhi+=12; } }

void draw_very_big_ascii(unsigned char liedizhi,unsigned char *text) { unsigned char column,i,j; unsigned char cs;

while(*text) { for(i=0;i column=liedizhi+i+i+i+i; if(column+j>60) { cs=1; column-=61; } else cs=0;

LCD_SetColumn(column+j); LCD_SetPage(0); LCD_SetRam(cs,target4);

LCD_SetColumn(column+j); LCD_SetPage(1); LCD_SetRam(cs,target3);

LCD_SetColumn(column+j); LCD_SetPage(2); LCD_SetRam(cs,target2);

LCD_SetColumn(column+j); LCD_SetPage(3); LCD_SetRam(cs,target1); } } text++; liedizhi+=24; } } 鉴于篇幅限制,只能写部分内容

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步, 如果需要 程序完整源代码和 设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有